#ifndef _aky_flash_H
#define _aky_flash_H
#include "aky_define.h"
#define EEPROM_SIZE						64			//4

#define AKY_ONE_SEC_SIZE (64ul) //一个扇区大小
#define FLASH_BUF_SIZE (AKY_ONE_SEC_SIZE * 2) //flash缓存数组的大小

#define aky_flash_start_addr (0xDE00ul)//1024 * 55.5

#define user_set_addr (cal_addr - (AKY_ONE_SEC_SIZE * 2))//设定保存
#define user_set_back_addr (user_set_addr + AKY_ONE_SEC_SIZE) //后备
#define cal_addr (flash_end_addr - (AKY_ONE_SEC_SIZE * 4))
#define cal_back_addr (cal_addr + AKY_ONE_SEC_SIZE) //后备

#define flash_end_addr ((0xFFFFul) + 1)//1024 * 64


#define CAL_DATA_MAX_SAVE_CNT (6ul)//校压值多次保存  保存和检查次数  最大16次
#define SET_DATA_MAX_SAVE_CNT (6ul)//设定值多次保存  保存和检查次数  最大16次
typedef enum{
    AKY_FLASH_OK = 0,
    AKY_FLASH_ERR,
}e_aky_flash_t;

typedef struct
{
    uint16_t cal_adc_val;//300点压力 - 零点 的adc差值
    uint16_t B1; //校压的压力值 10倍数  预留自动工装  手动校压则固定3000
    uint8_t cal_cnt; //校压的次数

    uint8_t check_sum;
}s_cal_t;//校压值结构体

typedef struct
{
    uint16_t inflat_limit_pres_val;//充泄气限定压力值
    uint16_t inflat_time;//充泄气充气时间
    uint16_t deflat_time;//充泄气泄气时间
    uint8_t last_selec_menu_index; //记住上次选择的菜单下标

    uint8_t fill_byte1; // 填充几个字节用于校验 因为字节过小时校验不准确
    uint8_t fill_byte2;
    uint8_t fill_byte3;

    uint8_t check_sum;
} s_set_t;

extern s_cal_t g_s_cal;
extern uint8_t flash_buf[FLASH_BUF_SIZE];
extern s_set_t g_s_set;


void flash_save_cal_data(s_cal_t s_cal);
s_cal_t flash_get_cal_data(void);
s_set_t get_default_set_data(void);
void store_set_to_flash(s_set_t s_set);
s_set_t get_flash_set_data(void);

#endif